/*
* 构件报废
* */

import 'dart:convert';

import 'package:barcode_scan2/model/scan_options.dart';
import 'package:barcode_scan2/platform_wrapper.dart';
import 'package:center_beijing/api/component_api.dart';
import 'package:center_beijing/api/product_api.dart';
import 'package:center_beijing/common/QRScan.dart';
import 'package:center_beijing/common/custom_floatingAction_buttonLocation.dart';
import 'package:center_beijing/common/logutil.dart';
import 'package:center_beijing/common/notification.dart';
import 'package:center_beijing/common/styles.dart';
import 'package:center_beijing/config/global_config.dart';
import 'package:center_beijing/config/routeConfig.dart';
import 'package:center_beijing/models/selectItem.dart';
import 'package:center_beijing/widgets/custom_loading_widget.dart';
import 'package:center_beijing/widgets/imageSelect_widget.dart';
import 'package:center_beijing/widgets/pull_select_widget.dart';
import 'package:center_beijing/widgets/select_widget.dart';
import 'package:center_beijing/widgets/textarea_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_pickers/pickers.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart' as Go;
import 'package:dio/dio.dart' as ImageForm;
import 'package:images_picker/images_picker.dart';
import 'dart:io';
import 'package:left_scroll_actions/left_scroll_actions.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

import '../widgets/custom_select_widget.dart';
import 'package:http_parser/http_parser.dart';

class ComponentScrap extends StatefulWidget {
  @override
  _ComponentScrapState createState() => _ComponentScrapState();
}

class _ComponentScrapState extends State<ComponentScrap> with SingleTickerProviderStateMixin {
  AnimationController _controller;
  List selectList = [];
  CustomLoading loading = CustomLoading.withMessage('提交中...');
  var multiData = {};
  var remark = '';
  bool listHide = false;
  var rectificationPerson = []; //审核人
  List<Media> photos = [];
  List passPhoto = [];
  ImageForm.FormData formData;
  @override
  void initState() {
    _controller = AnimationController(vsync: this);
    super.initState();
    var tem = Map();
    this.setState(() {
      multiData = tem;
    });
  }

  /*
  * 获取构件详情
  * */
  getCompDetail(compId) async {
    bool have = false;
    for (var i = 0; i < selectList.length; i++) {
      if (selectList[i]['id'] == compId) {
        have = true;
        break;
      }
    }
    if (!have) {
      var result = await getComponentDetail(compId);
      if (result != null) {
         if(result['state'].toString() == '3'){
          Fluttertoast.showToast(msg: '构件已经报废');
        } else if(result['processStatus'].toString() == '1'){
          Fluttertoast.showToast(msg: '构件还未生产');
        }else  {
           this.setState(() {
             selectList.add(result);
           });
         }
      }
    }
  }

  submit() async {
    var pass = {
      'item':{
        'scrapCause':remark,
        'projectSectionId':GlobalConfig.selectFactory.tag
      },
      'elementList':selectList.map((e){
        return {
          'orderName':e['orderInfo']['orderName'],
          'id':e['id'],
          'orderId':e['orderInfo']['id'],
          'levelId':e['levelId'],
          'levelPath':e['levelPath'],
          'dataType':e['dataType'],
          'code':e['code'],
          'mouldCode':e['mouldCode'],
          'pedestalCode':e['pedestalCode'],
          'drawingCode':e['drawingCode']
        };
      }).toList(),
      'fileIdList': passPhoto.map((e) {
        return e['attachmentId'];
      }).toList(),
      'scrapApprove':rectificationPerson.map((e) {
        return e['userId'];
      }).toList()
    };
    var result = await scrapApproval(pass);
    loading.dismiss();
    if (result != null && result == '') {
      bus.emit('refreshHome');
      Fluttertoast.showToast(msg: '提交成功');
      Go.Get.back();
    }
  }

  Future addImage() async {
    loading.show(delay: 30);
    this.passPhoto = [];
    if (this.photos.length > 0) {
      var temPhotos = [];
      temPhotos.addAll(this.photos);
      formData = new ImageForm.FormData.fromMap({
        "tenantId": GlobalConfig.tenantId,
      });
      for (int i = 0; i < temPhotos.length; i++) {
        Media asset = temPhotos[i];
        File file = File(asset.path);
        formData.files.add(MapEntry("files",
            await ImageForm.MultipartFile.fromFile(file.path.toString(),contentType: MediaType('image',file.path.toString().split('.').last))));
      }
      var result = await uploadImage(formData, GlobalConfig.tenantId);
      if (result != null && result.length > 0) {
        this.passPhoto = result;
        this.submit();
      }
    }else{
      this.submit();
    }

  }

  @override
  void dispose() {
    _controller.dispose();
    loading.dismiss();
    super.dispose();
  }


  justifyInfo(){
    if(rectificationPerson.length==0){
      Fluttertoast.showToast(msg: '请选择审核人');
      return false;
    } else if(selectList.length == 0) {
      Fluttertoast.showToast(msg: '请添加构件');
      return false;
    }else{
      return true;
    }

  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('构件报废'),
      ),
      body: Container(
        color: Styles.MainBackgroundColor,
        padding:
        EdgeInsets.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom),
        child: GestureDetector(
          onTap: (){
            FocusScope.of(context).requestFocus(FocusNode());
          },
          child: Column(
            children: [
              Expanded(
                  child: SingleChildScrollView(
                    child: Column(
                      children: [
                        Container(
                          margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, Styles.spacing8),
                          color: Colors.white,
                          child: SelectWidget(
                            title: '审核人',
                            rightText: this
                                .rectificationPerson
                                .map((item) {
                              return item['name'];
                            })
                                .toList()
                                .join(','),
                            require: true,
                            selectCallback: () async {
                              var select =
                              await Go.Get.toNamed(RouteConfig.selectReviewer);
                              if (select != null) {
                                this.setState(() {
                                  rectificationPerson = select;
                                });
                              }
                            },
                          ),
                        ),
                        Container(
                          color: Colors.white,
                          padding: EdgeInsets.fromLTRB(Styles.spacing16,
                              Styles.spacing8, Styles.spacing8, Styles.spacing8),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Row(
                                children: [
                                  RichText(
                                      text: TextSpan(children: [
                                        TextSpan(
                                            text: '已选构件（',
                                            style: TextStyle(
                                                color: Styles.DetailColor,
                                                fontSize: Styles.NormalFont)),
                                        TextSpan(
                                            text: selectList.length.toString(),
                                            style: TextStyle(
                                                color: Styles.BlueColor,
                                                fontSize: Styles.NormalFont)),
                                        TextSpan(
                                            text: '）',
                                            style: TextStyle(
                                                color: Styles.DetailColor,
                                                fontSize: Styles.NormalFont)),
                                      ])),
                                  GestureDetector(
                                    onTap: () {
                                      print('点击');
                                      this.setState(() {
                                        listHide = !listHide;
                                      });
                                    },
                                    child: Container(
                                      padding: EdgeInsets.fromLTRB(
                                          Styles.spacing4, 0, 0, 0),
                                      child: Text(
                                        '查看',
                                        style: TextStyle(
                                            color: Styles.BlueColor,
                                            fontSize: Styles.NormalFont),
                                      ),
                                    ),
                                  )
                                ],
                              ),
                              Expanded(
                                child: Container(
                                  padding: EdgeInsets.fromLTRB(
                                      Styles.spacing16, 0, Styles.spacing16, 0),
                                  margin: EdgeInsets.fromLTRB(
                                      0, Styles.spacing8, 0, Styles.spacing8),
                                  child: Row(
                                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                    children: [
                                      Expanded(
                                        child: GestureDetector(
                                          onTap: () async {
                                            var result = await Go.Get.toNamed(
                                                RouteConfig.selectComponentScrap,arguments: {'selectList':selectList});
                                            if (result != null) {
                                              this.setState(() {
                                                selectList = result;
                                              });
                                            }
                                          },
                                          child: Container(
                                            alignment: Alignment.center,
                                            padding: EdgeInsets.fromLTRB(
                                                Styles.spacing16,
                                                Styles.spacing8,
                                                Styles.spacing16,
                                                Styles.spacing8),
                                            decoration: BoxDecoration(
                                                color: Styles.GrayLight,
                                                border: Border.all(
                                                    color: Styles.LineColor,
                                                    width: 1),
                                                borderRadius: BorderRadius.all(
                                                    Radius.circular(4.0.r))),
                                            child: Text(
                                              '搜索构件',
                                              style: TextStyle(
                                                  color: Styles.LeftTitleColor,
                                                  fontSize: Styles.NormalFont),
                                            ),
                                          ),
                                        ),
                                      ),
                                      GestureDetector(
                                        onTap: () async {
                                          var result = await QrScan.scan(context);
                                          if (result != null) {
                                            if (result['type'] == 1) {
                                              this.getCompDetail(result['code']);
                                            } else {
                                              showDialog(
                                                  barrierDismissible: false,
                                                  context: context,
                                                  builder: (BuildContext context) {
                                                    return AlertDialog(
                                                      title: Text('注意'),
                                                      content: Text('请扫描构件二维码！'),
                                                      actions: <Widget>[
                                                        new Container(
                                                          child: FlatButton(
                                                            child: new Text(
                                                              "确定",
                                                              style: TextStyle(color: Colors.red),
                                                            ),
                                                            onPressed: () {
                                                              Navigator.pop(context);
                                                            },
                                                          ),
                                                        ),

                                                      ],
                                                    );
                                                  });
                                            }
                                          }
                                        },
                                        child: Container(
                                          color: Styles.BlueColor,
                                          padding: EdgeInsets.fromLTRB(
                                              Styles.spacing8,
                                              Styles.spacing8,
                                              Styles.spacing8,
                                              Styles.spacing8),
                                          margin:
                                          EdgeInsets.only(left: Styles.spacing16),
                                          child: Image.asset(
                                            'assets/images/scan.png',
                                            width: 20.w,
                                            height: 20.h,
                                            fit: BoxFit.contain,
                                            color: Colors.white,
                                          ),
                                        ),
                                      )
                                    ],
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ),
                        !listHide
                            ? Column(
                          children: this.selectList.map((item) {
                            return CupertinoLeftScroll(
                              // important, each Row must have different key.
                              // DO NOT use '$index' as Key! Use id or title.
                              key: Key(item.toString()),
                              // left scroll widget will auto close while the other widget is opened and has same closeTag.
                              // 当另一个有相同closeTag的组件打开时，其他有着相同closeTag的组件会自动关闭.
                              closeTag: LeftScrollCloseTag(item.toString()),
                              buttonWidth: 80,
                              child: Container(
                                color: Colors.white,
                                padding: EdgeInsets.fromLTRB(
                                    Styles.spacing8,
                                    Styles.spacing8,
                                    Styles.spacing8,
                                    Styles.spacing8),
                                margin: EdgeInsets.only(top: Styles.spacing8),
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    Row(
                                      children: [
                                        Container(
                                          margin: EdgeInsets.only(
                                              right: Styles.spacing8),
                                          height: 20.h,
                                          width: 4.w,
                                          color: Styles.BlueColor,
                                        ),
                                        Text(
                                          (item['compKind'] != null &&
                                              item['compKind']
                                              ['compKindName'] !=
                                                  null)
                                              ? item['compKind']['compKindName']
                                              : '--',
                                          style: TextStyle(
                                              color: Styles.DetailColor,
                                              fontSize: Styles.Middle16Font),
                                        ),
                                      ],
                                    ),
                                    Container(
                                      margin: EdgeInsets.fromLTRB(
                                          Styles.spacing8,
                                          0,
                                          Styles.spacing8,
                                          0),
                                      child: Column(
                                        crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                        children: [
                                          Text(
                                            item['code'] != null
                                                ? item['code']
                                                : '--',
                                            style: TextStyle(
                                                color: Styles.DetailColor,
                                                fontSize: Styles.Middle16Font),
                                          ),
                                          Text(
                                            (item['orderInfo'] != null &&
                                                item['orderInfo']
                                                ['orderName'] !=
                                                    null)
                                                ? item['orderInfo']['orderName']
                                                : '--',
                                            style: TextStyle(
                                                color: Styles.LeftTitleColor,
                                                fontSize: Styles.NormalFont),
                                          ),
                                          Text(
                                            item['levelPath'] != null
                                                ? (item['levelPath']
                                                .split('&_&_&'))
                                                .join('-')
                                                : '--',
                                            style: TextStyle(
                                                color: Styles.LeftTitleColor,
                                                fontSize: Styles.NormalFont),
                                          ),
                                        ],
                                      ),
                                    )
                                  ],
                                ),
                              ),
                              buttons: <Widget>[
                                GestureDetector(
                                  onTap: () {
                                    this.setState(() {
                                      selectList.remove(item);
                                    });
                                    print('删除');
                                  },
                                  child: Container(
                                    margin: EdgeInsets.fromLTRB(
                                        0, 0, Styles.spacing16, 0),
                                    decoration: BoxDecoration(
                                      color: Styles.RedColor,
                                      borderRadius: BorderRadius.all(
                                          Radius.circular(14.0.r)),
                                    ),
                                    alignment: Alignment.center,
                                    child: Column(
                                      mainAxisAlignment:
                                      MainAxisAlignment.center,
                                      children: [
                                        Image(
                                          image: AssetImage(
                                              'assets/images/delete.png'),
                                          width: 16.w,
                                          height: 16.w,
                                          fit: BoxFit.contain,
                                        ),
                                        Text(
                                          '删除',
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize: Styles.NormalFont),
                                        )
                                      ],
                                    ),
                                  ),
                                ),
                              ],
                              onTap: () {
                                print('tap row');
                              },
                            );
                          }).toList(),
                        )
                            : Container(),
                        Container(
                          color: Colors.white,
                          margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                          padding: EdgeInsets.fromLTRB(
                              Styles.spacing8, 0, Styles.spacing8, 0),
                          child: TextAreaWidget(
                            labelText: '报废原因',
                            defaultValue: '',
                            placeholder: '请输入报废原因',
                            disabled: false,
                            required: false,
                            rows: 4,
                            onChange: (value) => this.setState(() {
                              remark = value;
                            }),
                          ),
                        ),
                        Container(
                          margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                          color: Colors.white,
                          child: Column(
                            children: [
                              Padding(
                                padding: EdgeInsets.fromLTRB(
                                    Styles.spacing16, Styles.spacing8, 0, 0),
                                child: Row(
                                  children: <Widget>[
                                    Text(
                                      '照片(${this.photos.length}/6)',
                                      style: TextStyle(
                                          color: Styles.DetailColor,
                                          fontSize: Styles.MiddleFont17),
                                    ),
                                  ],
                                ),
                              ),
                              ImageSelectWidget(
                                onchange: (value) {
                                  this.setState(() {
                                    photos = value;
                                  });
                                },
                              ),
                            ],
                          ),
                        )
                      ],
                    ),
                  )),
              Container(
                padding: EdgeInsets.fromLTRB(
                    Styles.spacing8, Styles.spacing8, Styles.spacing8, 10),
                child: Container(
                  decoration: new BoxDecoration(
                    //背景
                    color: Styles.BlueColor,
                    //设置四周圆角 角度
                    borderRadius: BorderRadius.all(Radius.circular(12.0)),
                  ),
                  child: FlatButton(
                    disabledColor: Styles.SelectColor,
                    onPressed: () {
                      FocusScope.of(context).requestFocus(new FocusNode());
                      if(this.justifyInfo()){
                        showDialog(
                            barrierDismissible: false,
                            context: this.context,
                            builder: (BuildContext context) {
                              return AlertDialog(
                                title: Text('注意'),
                                content: Text('确认报废申请吗？'),
                                actions: <Widget>[
                                  new Container(
                                    child: FlatButton(
                                      child: new Text(
                                        "取消",
                                        style: TextStyle(color: Colors.black),
                                      ),
                                      onPressed: () {
                                        Navigator.pop(context);
                                      },
                                    ),
                                  ),
                                  new Container(
                                    child: FlatButton(
                                      child: new Text(
                                        "确定",
                                        style: TextStyle(color: Colors.red),
                                      ),
                                      onPressed: () {
                                        Navigator.pop(context);
                                        this.addImage();
                                      },
                                    ),
                                  ),
                                ],
                              );
                            });
                      }

                    },
                    child: Container(
                      height: Styles.MainButtonHeight,
                      alignment: Alignment.center,
                      child: Text(
                        '确认报废申请',
                        style: TextStyle(
                            fontSize: Styles.MainButtonTextFont,
                            color: Colors.white),
                      ),
                    ),
                  ),
                ),
              ),
            ],
          ),
        ) ,
      ),
    );
  }
}
